package com.mq.consumer;

/**
 * ClassName: ConsumerListener
 * Package: com.mq.consumer
 * Description:
 *
 * @Author: @weixueshi
 * @Create: 2024/8/6 - 23:58
 * @Version: v1.0
 */
import com.rabbitmq.client.Channel;
import org.springframework.amqp.core.ExchangeTypes;
import org.springframework.amqp.core.Message;
import org.springframework.amqp.rabbit.annotation.Exchange;
import org.springframework.amqp.rabbit.annotation.Queue;
import org.springframework.amqp.rabbit.annotation.QueueBinding;
import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.stereotype.Component;

/**
 * 消费者监听器
 */
@Component
public class ConsumerListener {

    /**
     * 交换机名称
     */
    public static final String EXCHANGE_NAME = "basic-consumer-exchange";

    /**
     * 路由键
     */
    public static final String ROUTING_KEY = "basic-consumer-routing-key";

    /**
     * 队列名称
     */
    public static final String QUEUE_NAME = "basic-consumer-queue";


    /**
     * 消费者监听方法
     * 注解：@RabbitListener解释：
     *       1、@RabbitListener：监听器注解，用于标识一个方法是一个消费者监听器
     *       2、@QueueBinding：队列绑定注解
     *       3、@Exchange：交换机注解
     *       4、@Queue：队列注解
     *       5、@key：路由键注解
     *       6、使用@RabbitListener注解的一个好处是当启动项目时，会自动创建队列、交换机、绑定关系
     * @param msg 接收到的消息体
     * @param message 消息对象
     * @param channel 通道对象
     */
//    @RabbitListener(bindings = @QueueBinding(
//                value = @Queue(name = QUEUE_NAME, durable = "true"),
//                exchange = @Exchange(name = EXCHANGE_NAME),
//                key = ROUTING_KEY
//        )
//    )
//    public void handlerMessage(String msg, Message message, Channel channel) {
//        System.out.println("消费者监听器接收到消息：" + msg);
//    }


    /**
     * 消费者监听方法
     *      1、直接使用queues指定队列，需要通过rabbitMQ
     *         页面首先添加这个队列名称以及绑定关系，否则报错
     * @param msg 接收到的消息体
     * @param message 消息对象
     * @param channel 通道对象
     */
    @RabbitListener(queues = QUEUE_NAME)
    public void handlerMessage(String msg, Message message, Channel channel) {
        System.out.println("消费者监听器接收到消息：" + msg);
    }

}
